iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
0

昨天已經完成Oka三態變身的UI,今天將繼續製作變身功能的主要程式。


首先介紹Oka物件的架構
https://ithelp.ithome.com.tw/upload/images/20200914/20130414JiRMXfnMUF.jpg

Player物件中有前幾天寫的control操控腳本以及碰撞器、Rigidbody等等,可以說是主角的主要物件。底下的子物件前三項Oka_ice、Oka_water、Oka_gas物件則是掌控各個型態的外表及能力。

我可以將各型態個別的操作程式以及不同的外觀及動畫放在各項物件底下,並在母物件Player上利用程式控制三個子物件的開關就能完成型態切換的功能。

以Oka_water為例,三個物件底下都有SpriteRenderer、animator、Skill腳本。題外話,其中三物件的animator及Skill腳本有需多地方相似,因此使用繼承或複寫功能可以方便快速進行製作。


回到主題

Step1:

我們需要先在母物件Player上建立PlayerChange腳本。並設立以下變數:

  • GameObject[] Oka_form,紀錄三個子物件的陣列
  • int form_index ,記錄目前玩家選擇的型態ID
  • PlayerWheel playerWheel ,用來呼叫變身UI的各項功能
    https://ithelp.ithome.com.tw/upload/images/20200914/20130414YyVLXHujTo.jpg

Step2:

在Start中設定好各項物件連結
https://ithelp.ithome.com.tw/upload/images/20200914/20130414mOH3Y1zz9q.jpg

Step3:

接下來在Update中作以下設定

  • 按下變身鍵時,UI出現、取得現在的型態ID
  • 持續按著變身鍵,利用方向鍵選擇變身型態號碼,同時設定UI選項發亮
  • 當放開變身鍵,如果選擇的ID和現在不是同一個,就呼叫變身函式,並同時關閉UI

https://ithelp.ithome.com.tw/upload/images/20200914/20130414OllbdIKdrB.jpg

Step4:

重點來了,在變身函式中透過ID的變化計算可以知道要往哪一個型態變身
https://ithelp.ithome.com.tw/upload/images/20200914/20130414sBeLYnCyzi.jpg

例如現在是水型態(ID=1) 玩家選擇變成冰型態(ID=0) 透過以上計算得到X= 0-1 = -1,因此會進行change previous,從下圖看就是往逆時針的型態變身。
https://ithelp.ithome.com.tw/upload/images/20200914/20130414pVAjOmGOQg.jpg

Step5:

當呼叫Skill_base變身時,Skill_base會呼叫不同的變身動畫。下圖為Skill_base裡面的函式
https://ithelp.ithome.com.tw/upload/images/20200914/20130414rX00VxUb8Q.jpg

Step6:

動畫完成後Skill_base會呼叫PlayerChange的ChangeFinish函式,將原本的型態子物件關閉,打開新型態的子物件,並且更新現在型態的ID。
https://ithelp.ithome.com.tw/upload/images/20200914/20130414KWTxVTlPR5.jpg

來看看完成的效果吧!

注意左側子物件的變化


再次看到這個變身效果,真的很幸運我們組的美術很有能力,變身的動畫效果實在太讚啦!

到這邊就完成變身效果的介紹囉,不果還是有個小瑕疵,當我暗助變身鍵切換型態時,左右鍵依然會讓主角移動。真正預期的效果是,當我開啟變身UI時可以限制主角移動,直到變身結束。

為了達成這個目標還需要一個"狀態機"功能,它就留給明天的篇幅囉。


上一篇
[Day12] 主角變身UI圖示
下一篇
[Day14] 簡易狀態機
系列文
Unity遊戲開發與實踐-BlueRemedy內容分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言